package com.liujiaqi.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Date;
import java.util.Map;

public class JwtUtils {

  // key的大小必须大于或等于256bit,需要32位英文字符，一个英文字符为：8bit,一个中文字符为12bit
  private static String key = "ssssssssssdfdsafasfdssdfsfsfssfs";
  //设置加密算法
  private static SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
  // 有效时间
  private static Long expire = 3600000L;

  /**
   * 生成JWT令牌
   *
   * @param claims JWT第二部分负载 payload 中存储的内容
   * @return
   */
  public static String generateJWT(Map<String, Object> claims) {
    String jwt = Jwts.builder()
      .signWith(getSecretKey(), signatureAlgorithm) // 签名算法
      .setSubject("itHeiMa") // 设置主题
      .setClaims(claims) // 自定义内容（载荷）
      .setExpiration(new Date(System.currentTimeMillis() + expire)) // 设置令牌的有效期为1h
      .compact();

    return jwt;
  }

  /**
   * 解析JWT令牌
   *
   * @param jwt JWT令牌
   * @return JWT第二部分负载 payload 中存储的内容
   */
  public static Claims parseJWT(String jwt) {

    Claims claims = Jwts.parserBuilder()
      .setSigningKey(getSecretKey())
      .build()
      .parseClaimsJws(jwt)
      .getBody();

    return claims;
  }

  /**
   * 获取转换后的私钥对象
   *
   * @return
   */
  public static SecretKey getSecretKey() {
    return Keys.hmacShaKeyFor(key.getBytes());
  }

}
